package com.yuanfeng.action.front.user.web;

import com.yuanfeng.action.front.user.service.IUserService;
import com.yuanfeng.pojo.Users;
import org.apache.struts2.ServletActionContext;

import javax.servlet.http.HttpServletRequest;
import java.util.Calendar;
import java.util.Date;

import static com.opensymphony.xwork2.Action.ERROR;
import static com.opensymphony.xwork2.Action.SUCCESS;

/**
 * Created by yuanfeng on 2019/5/8 13:59
 */
public class ActiveAction {

    private IUserService userServiceImpl;

    public void setUserServiceImpl(IUserService userServiceImpl) {
        this.userServiceImpl = userServiceImpl;
    }

    /**
     * 激活用户
     *
     * @return
     */
    public String activeUser() {

        HttpServletRequest request = ServletActionContext.getRequest();
        //接收用户发送的参数
        String email = request.getParameter("email");
        String code = request.getParameter("code");

        //1)检查随机码激活是否存在
        Users user = userServiceImpl.queryUser(code);
        if (user != null) {
            //2) 检查是否超过48小时
            // 当前系统时间  vs  用户注册的时间
            //  当前系统时间
            Date current = new Date();
            //  用户注册的时间
            Date regtime = user.getRegtime();

            // 计算 最后过期时间 ,如果最后过期 晚于 当前系统时间，则代表过期了！！！
            Date lasttime = calLastTime(regtime);

            if (current.before(lasttime)) {
                // 3)检查邮箱是否正确
                if (user.getEmail().equals(email)) {
                    // 4)激活用户（修改user_list表的status值，改为1）
                    request.setAttribute("msg", "激活成功,请到登录页面进行登录");
                    return SUCCESS;
                } else {
                    //邮箱不存在的
                    request.setAttribute("msg", "邮箱不存在！");
                    return ERROR;
                }
            } else {
                //已经过期
                request.setAttribute("msg", "激活时间已经过期！");
                return ERROR;
            }
        } else {
            //随机码不存在
            request.setAttribute("msg", "随机验证码不存在！");
            return ERROR;
        }
    }

    /**
     * 计算  最后过期时间（注册时间+2天）
     */
    private Date calLastTime(Date regtime) {
        //日历对象
        Calendar c = Calendar.getInstance();
        c.setTime(regtime);
        //把日历+2天
        c.add(Calendar.DATE, 2);
        //返回+2天后的时间
        return c.getTime();
    }
}
